<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>class属性继承原理</title>
</head>
<body>
    
</body>
<script>
    /*
        class属性继承原理  因为class是原型的语法糖 所以跟原型相比  会简单非常非常对
    */
    // 原型实现属性继承
    function User(){

    }
    function People(){

    }
    People.prototype = Object.create(User.prototype)
    User.prototype.show = function(){
        console.log('原型')
    }
    let peo = new People()
    console.log(peo)
    console.log(peo.__proto__)  //User {}  peo的父类时User
    peo.show()  //原型  这样就实现了构造函数的原型

    /*
        Functioon是由多个身份的 他可以作为对象来使用  也可以作为构造函数来使用， 二者有着不同的原型
            当作为构造函数时 他的原型就是 prototype
            当作为对象时，他的原型就变成了 __proto__
    */

    // class的继承
    class jimmy{
        constructor(value){
            this.name = value
        }
    }
    class xue extends jimmy{
        constructor(value){
            super(value)  //super需要传递一个参数  因为父类的构造函数就是由传递参数的
        }
    }
    let xuexue = new xue('zhangxue')
    console.log(xuexue)  //xue {name: "zhangxue"}
    console.log(xuexue.__proto__)  //jimmy {constructor: ƒ}  xuexue的父类时jimmy
    /*
        类中的继承 使用super()方法就可以实现了  他为我们封装好了
            所以类真的时为我们简化了很多很多复杂的操i做

    */

</script>
</html>